<?php

require_once 'BackupManager.php';

function handle_backup ()
{
	global $config;

	$tpl = tpl_engine();
	$tpl->pushResourceDir(url_dirname(__FILE__));

	$bm = new BackupManager(array('root_dir' => $config['dir.localstate'].'backup/'));
	$bs_list = $bm->listBackups();

	$tpl->set('backups', $bs_list);

	echo $tpl->parse('backup.html', 'body');
	return;
} // end of function handle_auth

function handle_backup_POST ()
{
	global $config;

	$bm = new BackupManager(array('root_dir' => $config['dir.localstate'].'backup/'));

	if (request_get_param('ev_delete', false)) {
		$del = request_get_param('del', array());
		if (!is_array($del)) $del = array($del);
		foreach ($del as $v) {
			if ($v && ($b = $bm->findBackupByFilename($v))) {
				$bm->deleteBackup($b);
			}
		}
	}

	if (request_get_param('ev_create', false)) {
		if (!isset ($GLOBALS['m_backup'])) { $GLOBALS['m_backup'] = $bm->createBackup(); }
		$backup = $GLOBALS['m_backup'];

		global $RH_ATF; global $RH_NEXT_STATE, $RH_ERROR;
		$RH_ATF['Backup']['go'] = dirname(__FILE__).'/../update/backup.php';
		if ($RH_ERROR) {
			echo 'InternalError';
			return;
		}

		if (!file_exists($backup->getPath())) {
			$RH_NEXT_STATE = 'Backup';
			$db_php = $config['dir.install'] . 'etc/conf.d/db.php';
			require $db_php;
			assert('is_array($config) ;// database config not found in $config');
			assert('$config["db_host"] && $config["db_name"] && $config["db_user"] && $config["db_password"]');
			$GLOBALS['M_ADMIN_UPDATE'] = array(
				'config' => $config,
				'dump_sql' => $backup->getPath(),
			);
			return false;
		}

	}

	if (request_get_param('ev_restore', false)) {
		$v = request_get_param('restore');
		// обновление структуры БД
		if ($v && ($b = $bm->findBackupByFilename($v))) {
			$dump_sql = $b->getPath();
			if (file_exists($dump_sql)) {
				$config_php = $config['dir.install'].'etc/conf.d/db.php';
				include ($config_php);
				require_once 'UpMysql.php';
				$db = new UpMysql($config);

				// FIXME : 2008-06-16 : lucky
				// по большей части C&P from admin/modules/update/index.php: UpdateSiteManipulator::restoreDb()
				//
				// в БД могли появиться таблицы, отсутствующие в дампе
				// удалим из БД те таблицы, чьё название начинается на $db->db_prefix
				$prefix = $db->db_prefix;
				$sql = " SHOW TABLES ";
				$rs = $db->query($sql);
				while ($row = $db->getOne($rs)) {
					reset($row);
					$table = current($row);
					if (strpos($table, $prefix) === 0) { // считаем, что названия таблиц,
																							 // которыми мы можем манипулировать, начинается на $db->db_prefix
						if (!$db->query(" DROP TABLE `{$table}` ")) {
							$this->error = $db->error;
							return false;
						}
					}
				}

				require 'MysqlImport.php';
				$m = new MysqlImport(array('import_file' => $dump_sql, 'db' => $db));
				if (!$m->process()) {
					echo "Error {$m->error}";
					return;
				}
			} else {
				echo "Database dump file [{$dump_sql}] not found";
				return;
			}
		}
	}

	request_redirect('?m=backup');
}


?>
